<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>7.静态属性使用</title>
</head>

<body>
  <script>
    // 构造方法设置 静态属性
    //静态属性即为构造函数设置属性，而不是为生成的对象设置
    function User(url) {
      this.url = url;
    }
    // 设置静态函数
    User.site = "后盾人";
    console.dir(User);

    const hd = new User("hd");
    console.log(hd.site); //undefiend 静态属性不是属于具体对象的
    console.log(hd.url); //hd 普通属性属于每个对象
    // ========== 设置静态函数 ================
    console.log(User.site); //后盾人
    const hd2 = new User("hd2");
    console.log(hd2.site); //undefiend 静态属性不是属于具体对象的
    console.log(hd2.url); //hd2 普通属性属于每个对象
    hd2.url = "hd3";
    console.log(hd2.url); //hd3 普通属性属于每个对象
    console.log(User.site); //后盾人



    //在 class 中为属性添加 static 关键字即声明为静态属性
    //可以把为所有对象使用的值定义为静态属性

    class Request {
      static HOST = "https://www.houdunren.com";
      host = "https://www.houdunren.com";
      api(url) {
        return Request.HOST + "/" + url;
      }

    }

    // url 作为对象的属性不能统一改变，作为所有对象共用的HOST 属性，完全可以使用 static 关键字声明为静态属性
    let request1 = new Request();
    console.log(request1.host);//https://www.houdunren.com
    let request2 = new Request();
    request1.host = "www.baidu.com"//www.baidu.com
    console.log(request1.host);
    console.log(request2.host);//https://www.houdunren.com

    // static 方法获取 url
    console.log(request1.api('article'));//https://www.houdunren.com/article
  </script>
</body>

</html>